package com.manelrodriguez.applications.ibex35.bo;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;

import com.manelrodriguez.applications.ibex35.adapters.DbAdapter;
import com.manelrodriguez.applications.ibex35.to.Movimiento;

public class MovimientoBO {
	protected DbAdapter db;
	protected Cursor cursor;
	
	public MovimientoBO(Context ctx){
		this.db = new DbAdapter(ctx);
	}
	public Movimiento getMovimiento(long rowId){
		db.open();
		Cursor cursor = db.getMovimiento(rowId);
		Movimiento mov = new Movimiento(cursor.getInt(0), cursor.getString(1), cursor.getDouble(2), cursor.getDouble(3), cursor.getDouble(4),cursor.getDouble(5));
		cursor.close();
		db.close();
		
		return mov;
	}
	
	public long guardarMovimiento(Movimiento movimiento) {
		db.open();
		long num = db.guardarMovimiento(movimiento);
		db.close();
		
		return num;
	}
	
	public boolean borrarMovimiento(int id) {
		db.open();
		boolean result = db.borrarMovimiento(id);
		db.close();
		
		return result;
	}
	
	public boolean borrarMovimientosEmpresa(String idEmpresa) {
		db.open();
		boolean result = db.borrarMovimientosEmpresa(idEmpresa);
		db.close();
		
		return result;
	}
	
	public List<Movimiento> getMovimientos() {
		List<Movimiento> movimientos = null;
		String idEmpresa = null;;
		db.open();
		cursor = db.getMovimientos();
		if(cursor.moveToFirst()){
			movimientos = new ArrayList<Movimiento>();
			do {
				int idMovimiento = cursor.getInt(0);
		        idEmpresa = cursor.getString(1);
		        double numAcciones = cursor.getDouble(2);
		        double precioUnitario = cursor.getDouble(3);
		        double precioCompra = cursor.getDouble(4);
		        double comision = cursor.getDouble(5);
		        Movimiento mov = new Movimiento(idMovimiento,idEmpresa, numAcciones, precioUnitario, comision, precioCompra);
		        movimientos.add(mov);
		    } while(cursor.moveToNext());
		}
		cursor.close();
		db.close();
		
		return movimientos;
	}
	
	public List<Movimiento> getMovimientosAgrupados() {
		List<Movimiento> movimientos = null;
		db.open();
		cursor = db.getMovimientosAgrupados();
		double totalNumAcciones = 0, totalPrecioUnitario = 0, totalComision = 0, totalPrecioCompra = 0;
		if(cursor.moveToFirst()){
			movimientos = new ArrayList<Movimiento>();
			do {
		        String idEmpresa = cursor.getString(0);
		        double numAcciones = cursor.getDouble(1);
		        double precioCompra = cursor.getDouble(2);
		        double comision = cursor.getDouble(3);
		        double precioUnitario = precioCompra/numAcciones;
		        totalNumAcciones += numAcciones;
		        totalPrecioCompra += precioCompra;
		        totalComision += comision;
		        Movimiento mov = new Movimiento(0,idEmpresa, numAcciones, precioUnitario, comision, precioCompra);
		        movimientos.add(mov);
		    } while(cursor.moveToNext());
			totalPrecioUnitario = totalPrecioCompra/totalNumAcciones;
			Movimiento mov = new Movimiento(0,"", totalNumAcciones, totalPrecioUnitario, totalComision, totalPrecioCompra);
			movimientos.add(mov);
		}
		cursor.close();
		db.close();
		
		return movimientos;
	}
	
	public List<Movimiento> getMovimientosEmpresa(String empresaId) {
		List<Movimiento> movimientos = null;
		String idEmpresa = null;
		db.open();
		cursor = db.getMovimientosEmpresa(empresaId);
		if(cursor.moveToFirst()){
			movimientos = new ArrayList<Movimiento>();
			do {
				int idMovimiento = cursor.getInt(0);
		        idEmpresa = cursor.getString(1);
		        double numAcciones = cursor.getDouble(2);
		        double precioUnitario = cursor.getDouble(3);
		        double comision = cursor.getDouble(4);
		        double precioCompra = cursor.getDouble(5);
		        Movimiento mov = new Movimiento(idMovimiento,idEmpresa, numAcciones, precioUnitario,comision, precioCompra);
		        movimientos.add(mov);
		    } while(cursor.moveToNext());
		}
		cursor.close();
		db.close();
		
		return movimientos;
	}
	
	public boolean actualizarMovimiento(long rowId, Movimiento movimiento) {
		db.open();
		boolean result = db.actualizarMovimiento(rowId, movimiento);
		db.close();
		
		return result;
	}
}
